Skip to main content
Make it clear that we're talking about some Microsoft specific utility access a Microsoft SQL server implementation using some Microsoft-specific SQL language as that's likely relevant.
Source Link
Stéphane Chazelas
  • 553.6k
  • 92
  • 1.1k
  • 1.6k

I was writing a shell script for inserting a string value through a Microsoft sqlcmd variable into a Microsoft SQL server database table and noticed some unexpected behavior. It appeared the trailing equals (=) character and everything after were being truncated (the target column had no character limit). In attempt to narrow down the source of the behavior, I wrote a simple Microsoft SQL script (test.sql) that prints a sqlcmd variable:

PRINT '$(PrintMe)'

And then tested it with the following command:

sqlcmd -S localhost -U sa -P password -v PrintMe='abc==' -i test.sql

To my surprise, the output was abc instead of the expected abc==.

At first, I thought this was sqlcmd doing something strange with my variable value, but altering the script:

:setvar PrintMe "abc=="
PRINT '$(PrintMe)'

printed abc== as expected.

Now it made me wonder if zsh or bash were misinterpreting those characters for some reason (e.g. as macros/expansions). Using a double-quoted value made no difference in the output. In fact, I noticed a variable value like abc=123 output just abc, truncating everything including and after the equals. Trying to escape the = character using a value like 123\= output 123\. After reading about zsh = expansion, though I doubted it was the cause, I tried running unsetopt EQUALS but saw no change in the output.

I ran these commands with sqlcmd 1.6.0, zsh 5.9 (x86_64-apple-darwin21.3.0) on macOS Ventura 13.6.6 and again with bash 5.2.26(1)-release (x86_64-apple-darwin22.6.0) with no change in results.

Is there any explanation for what's going on here?

I was writing a shell script for inserting a string value through a sqlcmd variable into a SQL server database table and noticed some unexpected behavior. It appeared the trailing equals (=) character and everything after were being truncated (the target column had no character limit). In attempt to narrow down the source of the behavior, I wrote a simple SQL script (test.sql) that prints a sqlcmd variable:

PRINT '$(PrintMe)'

And then tested it with the following command:

sqlcmd -S localhost -U sa -P password -v PrintMe='abc==' -i test.sql

To my surprise, the output was abc instead of the expected abc==.

At first, I thought this was sqlcmd doing something strange with my variable value, but altering the script:

:setvar PrintMe "abc=="
PRINT '$(PrintMe)'

printed abc== as expected.

Now it made me wonder if zsh or bash were misinterpreting those characters for some reason (e.g. as macros/expansions). Using a double-quoted value made no difference in the output. In fact, I noticed a variable value like abc=123 output just abc, truncating everything including and after the equals. Trying to escape the = character using a value like 123\= output 123\. After reading about zsh = expansion, though I doubted it was the cause, I tried running unsetopt EQUALS but saw no change in the output.

I ran these commands with sqlcmd 1.6.0, zsh 5.9 (x86_64-apple-darwin21.3.0) on macOS Ventura 13.6.6 and again with bash 5.2.26(1)-release (x86_64-apple-darwin22.6.0) with no change in results.

Is there any explanation for what's going on here?

I was writing a shell script for inserting a string value through a Microsoft sqlcmd variable into a Microsoft SQL server database table and noticed some unexpected behavior. It appeared the trailing equals (=) character and everything after were being truncated (the target column had no character limit). In attempt to narrow down the source of the behavior, I wrote a simple Microsoft SQL script (test.sql) that prints a sqlcmd variable:

PRINT '$(PrintMe)'

And then tested it with the following command:

sqlcmd -S localhost -U sa -P password -v PrintMe='abc==' -i test.sql

To my surprise, the output was abc instead of the expected abc==.

At first, I thought this was sqlcmd doing something strange with my variable value, but altering the script:

:setvar PrintMe "abc=="
PRINT '$(PrintMe)'

printed abc== as expected.

Now it made me wonder if zsh or bash were misinterpreting those characters for some reason (e.g. as macros/expansions). Using a double-quoted value made no difference in the output. In fact, I noticed a variable value like abc=123 output just abc, truncating everything including and after the equals. Trying to escape the = character using a value like 123\= output 123\. After reading about zsh = expansion, though I doubted it was the cause, I tried running unsetopt EQUALS but saw no change in the output.

I ran these commands with sqlcmd 1.6.0, zsh 5.9 (x86_64-apple-darwin21.3.0) on macOS Ventura 13.6.6 and again with bash 5.2.26(1)-release (x86_64-apple-darwin22.6.0) with no change in results.

Is there any explanation for what's going on here?

edited tags
Link
Kusalananda
  • 338.9k
  • 37
  • 682
  • 991
Source Link
Mark
  • 101

Why are my strings being truncated including and after an equals sign?

I was writing a shell script for inserting a string value through a sqlcmd variable into a SQL server database table and noticed some unexpected behavior. It appeared the trailing equals (=) character and everything after were being truncated (the target column had no character limit). In attempt to narrow down the source of the behavior, I wrote a simple SQL script (test.sql) that prints a sqlcmd variable:

PRINT '$(PrintMe)'

And then tested it with the following command:

sqlcmd -S localhost -U sa -P password -v PrintMe='abc==' -i test.sql

To my surprise, the output was abc instead of the expected abc==.

At first, I thought this was sqlcmd doing something strange with my variable value, but altering the script:

:setvar PrintMe "abc=="
PRINT '$(PrintMe)'

printed abc== as expected.

Now it made me wonder if zsh or bash were misinterpreting those characters for some reason (e.g. as macros/expansions). Using a double-quoted value made no difference in the output. In fact, I noticed a variable value like abc=123 output just abc, truncating everything including and after the equals. Trying to escape the = character using a value like 123\= output 123\. After reading about zsh = expansion, though I doubted it was the cause, I tried running unsetopt EQUALS but saw no change in the output.

I ran these commands with sqlcmd 1.6.0, zsh 5.9 (x86_64-apple-darwin21.3.0) on macOS Ventura 13.6.6 and again with bash 5.2.26(1)-release (x86_64-apple-darwin22.6.0) with no change in results.

Is there any explanation for what's going on here?