我试图执行以下计算
样本数据:
CREATE TABLE #Table1
(
rno int identity(1,1),
ccp varchar(50),
[col1] INT,
[col2] INT,
[col3] INT,
col4 as [col2]/100.0
);
INSERT INTO #Table1
(ccp,[col1],[col2],[col3])
VALUES ('ccp1',15,10,1100),
('ccp1',20,10,1210),
('ccp1',30,10,1331),
('ccp2',10,15,900),
('ccp2',15,15,1000),
('ccp2',20,15,1010)
+-----+------+------+------+------+----------+
| rno | ccp | col1 | col2 | col3 | col4 |
+-----+------+------+------+------+----------+
| 1 | ccp1 | 15 | 10 | 1100 | 0.100000 |
| 2 | ccp1 | 20 | 10 | 1210 | 0.100000 |
| 3 | ccp1 | 30 | …Run Code Online (Sandbox Code Playgroud) 我在SQL Server 2008中工作.我正在尝试测试字符串(varchar)是否只有数字字符(0-9).我知道IS_NUMERIC函数可以产生虚假结果.(我的数据可能有$符号,不应该通过测试.)所以,我正在避免这个功能.
我已经有一个测试,看看一个字符串是否有任何非数字字符,即,
some_column LIKE '%[^0123456789]%'
Run Code Online (Sandbox Code Playgroud)
我认为唯一的数字测试会是类似的,但我画了一个空白.有任何想法吗?
我需要在表单提交数据后执行存储过程.我的存储过程就像我想要的那样工作,并且我的表单正常工作.我只是不知道从laravel 5执行sp的语句.
它应该是这样的:执行my_stored_procedure.但我似乎无法在网上找到类似的东西.
我试图从我的Table数据导出到Excel通过T-SQL查询.经过一些研究,我想出了这个
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=G:\Test.xls;',
'SELECT * FROM [Sheet1$]')
SELECT *
FROM dbo.products
Run Code Online (Sandbox Code Playgroud)
当我执行上述查询时出现此错误
消息7302,级别16,状态1,行7无法为链接服务器"(null)"创建OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"的实例.
所以通过互联网寻求解决方案,得到以下链接
在上面的链接中,他们说我们需要管理员在C盘 TEMP文件夹中创建文件夹,因为在文件夹中OPENROWSET创建了一些文件或文件TEMP夹
我在My Home PC中这样做,我是管理员.仍然得到同样的错误.
SQL SERVER详细信息
Microsoft SQL Server 2016(RC1) - 13.0.1200.242(X64)2016年3月10日16:49:45版权所有(c)Windows 10 Pro 6.3上的Microsoft Corporation企业评估版(64位)(Build 10586 :)
任何解决问题的指针都将受到高度赞赏
更新:我已经配置了Ad Hoc Distributed Queries和
执行以下查询
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO
Run Code Online (Sandbox Code Playgroud)
现在我收到了这个错误
消息7438,级别16,状态1,行7 32位OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"无法在64位SQL Server上进行加载.
我想使用查询将数据从Excel导入SQL Server,而不是使用向导.我试过这个查询:
Select * INTO g FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 12.0;Database=D:\new.xlsx;HDR=YES', 'SELECT * FROM [newSheet$]');
Run Code Online (Sandbox Code Playgroud)
但是,我收到了这个错误:
消息7308,级别16,状态1,行1
OLE DB提供程序"Microsoft.Jet.OLEDB.4.0"不能用于分布式查询,因为提供程序配置为在单线程单元模式下运行.
所以我在谷歌搜索,得到的回答如下:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)
即使在重新配置后它也会向我显示相同的错误......
我正在尝试将Azure Blob存储中存在的以下Excel文件导入SQL Server
EXCEL文件
询问
SELECT *
FROM OPENROWSET(
BULK 'container/testfile.xlsx',
DATA_SOURCE = 'ExternalSrcImport',
FORMATFILE='container/test.fmt', FORMATFILE_DATA_SOURCE = 'ExternalSrcImport',
codepage = 1252,
FIRSTROW = 1
) as data
Run Code Online (Sandbox Code Playgroud)
格式化文件
10.0
4
1 SQLCHAR 0 7 "\t" 1 DepartmentID ""
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "\t" 3 GroupName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 24 "\r\n" 4 ModifiedDate ""
Run Code Online (Sandbox Code Playgroud)
格式文件说明
当我执行查询时,出现以下错误
消息4863,级别16,状态1,行210的行1,列1(部门ID)的大负荷数据转换错误(截断)。
看起来格式文件中的字段终止符不起作用,导入文件有什么想法吗?
我有两张桌子
WAC表
ID wac_inc item
-- ----------------- ----
1 2.310000000000000 A
2 1.100000000000000 A
3 2.130000000000000 A
4 1.340000000000000 A
Run Code Online (Sandbox Code Playgroud)
基线表
item baseline
---- ------------------
A 10.000000000000000
Run Code Online (Sandbox Code Playgroud)
预期结果
ID wac_inc item Running_Mul
-- ----------------- ---- -----------
1 2.310000000000000 A 10.231 -- 10 * (1+(2.310000000000000/100))
2 1.100000000000000 A 10.343541 -- 10.231 * (1+(1.100000000000000/100))
3 2.130000000000000 A 10.563858 -- 10.343541 * (1+(2.130000000000000/100))
4 1.340000000000000 A 10.705413 -- 10.563858 * (1+(1.340000000000000/100))
Run Code Online (Sandbox Code Playgroud)
找到的公式running_mul是
基线*(1 +(wac_inc/100))
这里对于每一行,前一行的Running_Mul值是baseline和第一行的baseline …
我试图在SQL Server查询中替换多个字符,并希望通过#temp表而不是嵌套的REPLACE来实现.我在下面得到了SQL代码,想要实现像这样的结果
ABC
DEF
GHI
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2
CREATE TABLE #temp
(
STRING_TO_REPLACE NVARCHAR(5)
)
INSERT INTO #temp (STRING_TO_REPLACE)
VALUES (' ')
,('/')
,('_')
CREATE TABLE #temp2
(
STRING_NAME NVARCHAR(5)
)
INSERT INTO #temp2 (STRING_NAME)
VALUES ('A BC')
,('D/EF')
,('G_HI')
SELECT REPLACE(t2.STRING_NAME,(SELECT t1.STRING_TO_REPLACE
FROM #temp t1),'')
FROM #temp2 t2
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL DROP TABLE #temp2
Run Code Online (Sandbox Code Playgroud)
我可以用嵌套替换来实现结果
SELECT …Run Code Online (Sandbox Code Playgroud) 我试图计算运行总数.但是当累计和大于另一列值时,它应该重置
create table #reset_runn_total
(
id int identity(1,1),
val int,
reset_val int
)
insert into #reset_runn_total
values
(1,10),
(8,12),(6,14),(5,10),(6,13),(3,11),(9,8),(10,12)
Run Code Online (Sandbox Code Playgroud)
样本数据
+----+-----+-----------+
| id | val | reset_val |
+----+-----+-----------+
| 1 | 1 | 10 |
| 2 | 8 | 12 |
| 3 | 6 | 14 |
| 4 | 5 | 10 |
| 5 | 6 | 13 |
| 6 | 3 | 11 |
| 7 | 9 | 8 |
| 8 …Run Code Online (Sandbox Code Playgroud) 我试图在同一个查询中使用不同的参数两次调用TVF,但由于某种原因,当我将结果加在一起时,其中一个结果掩盖了另一个.我把问题简化为这个小例子:
拿这个内联TVF:
CREATE FUNCTION dbo.fnTestErrorInline(@Test INT)
RETURNS TABLE
AS
RETURN
(
SELECT ID, Val
FROM (VALUES
(1, 1, 10),
(1, 2, 20),
(1, 3, 30),
(1, 4, 40),
(2, 1, 50),
(2, 2, 60),
(2, 3, 70),
(2, 4, 80)
) t(Test, ID, Val)
WHERE t.Test=@Test
)
Run Code Online (Sandbox Code Playgroud)
和等效的多线函数:
CREATE FUNCTION dbo.fnTestErrorMultiline(@Test INT)
RETURNS @tbl TABLE (
ID INT NOT NULL,
Val INT NOT NULL
)
AS
BEGIN
IF @Test=1
INSERT INTO @tbl (ID, Val) VALUES
(1, 10),
(2, 20),
(3, …Run Code Online (Sandbox Code Playgroud) sql sql-server user-defined-functions common-table-expression